package com.wl.cloud.system.service;

import com.wl.cloud.core.dto.DataStoreDTO;
import com.wl.cloud.system.domain.SysRole;
import com.wl.cloud.system.support.dto.RoleRightsDTO;
import com.wl.cloud.system.support.dto.SysRoleDTO;
import com.wl.cloud.system.support.dto.query.SysRoleQueryDTO;
import com.wl.cloud.system.support.vo.SysRoleVO;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;

import java.util.List;
import java.util.Set;

/**
 * 角色表 前端控制器
 *
 * @author wanglin
 * @since 2023-09-18
 */
public interface SysRoleService {

    /**
     * 分页
     *
     * @param pageable
     * @param queryDto
     * @return
     */
    DataStoreDTO<SysRoleVO> page(Pageable pageable, SysRoleQueryDTO queryDto);

    /**
     * 列表
     *
     * @param sort
     * @param queryDto
     * @return
     */
    List<SysRoleVO> list(Sort sort, SysRoleQueryDTO queryDto);

    /**
     * 保存
     *
     * @param dto
     */
    void save(SysRoleDTO dto);

    /**
     * 更新
     *
     * @param dto
     */
    void update(SysRoleDTO dto);

    /**
     * 查看
     *
     * @param id
     * @return
     */
    SysRoleVO get(String id);

    /**
     * 查看
     *
     * @param id
     * @return
     */
    SysRoleVO getDetail(String id);

    /**
     * 删除
     *
     * @param ids
     */
    void delete(Set<String> ids);

    /**
     * 通过角色的code获取id
     *
     * @param code
     * @return
     */
    SysRole getRoleByCode(String code);

    /**
     * 分配角色权限
     *
     * @param dto
     * @return
     */
    void distributeRights(RoleRightsDTO dto);

    /**
     * 校验角色是否有数据权限
     *
     * @param roleId
     */
    void checkRoleDataScope(String roleId);

    /**
     * 根据用户账号获取授权角色
     *
     * @param pageable
     * @param userId
     * @return
     */
    DataStoreDTO<SysRoleVO> selectRolesByUserId(Pageable pageable, String userId);

    /**
     * 更改状态
     *
     * @param roleId
     */
    void updateStatusById(String roleId);
}
